#ifndef DELAYED_PARSE_H
#define DELAYED_PARSE_H

#include <vector>
#include <queue>
#include <chrono>
#include <mutex>
#include <condition_variable>

/** 
 * 延时队列中储存的包结构：包含数据和到达时间 
 */
struct DelayedPacket {
    std::vector<unsigned char> data;
    std::chrono::steady_clock::time_point arrivalTime;
};

/** 
 * 全局队列、互斥量、条件变量 (如果想声明在 .cpp 内也行，需提供访问函数)
 * 这里示例声明为 "extern" 并在 delayedParse.cpp 中定义
 */
extern std::queue<DelayedPacket> g_delayQueue;
extern std::mutex g_delayQueueMutex;
extern std::condition_variable g_delayQueueCV;

/** 
 * 固定延时（毫秒），可在 delayedParse.cpp 中定义
 */
extern const int FIXED_DELAY_MS;

/**
 * @brief 延时解析线程函数
 *
 * - 从 g_delayQueue 中 pop 数据
 * - sleep_until 到 arrivalTime + FIXED_DELAY_MS
 * - 做解析后写回 g_latestPacket
 */
void delayedParseThreadFunc();

/** 
 * 如果需要丢包机制:
 * 1) 定义一个最大队列长度
 * 2) 在 push 之前如果超过长度就丢包 
 */
extern const size_t MAX_QUEUE_SIZE;   // 可在 .cpp 中定义
void pushPacketWithDrop(const DelayedPacket &dp); 

#endif // DELAYED_PARSE_H
